package principal;

/**
 * Javier Abell�n, 24 Mayo 2006
 * Clase que se suscribe a los movimientos de rat�n y lleva las coordenadas
 * por las que se va arrastrando, avisando al InterfaceArrastrarRaton 
 * correspondiente.
 */

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

/**
 * Clase que se suscribe a los movimientos de rat�n y lleva las coordenadas por
 * las que se va arrastrando, avisando al InterfaceArrastrarRaton
 * correspondiente. Implementa MouseMotionListener para que la pueda a�adir como
 * addMouseMotionListener() de un Component java.
 * 
 * @author Chuidiang
 */
public class ListenerArrastre implements MouseMotionListener, MouseListener {
	/**
	 * Clase encargada de hacer algo con el arrastre del rat�n
	 * 
	 * @uml.property name="accion"
	 * @uml.associationEnd
	 */
	private InterfaceArrastrarRaton accion;

	/**
	 * Construye una instancia de esta clase y se guarda la accion que se le
	 * pasa.
	 * 
	 * @param accion
	 *            Clase a la que se ir� avisando del arrastre del rat�n.
	 */
	public ListenerArrastre(InterfaceArrastrarRaton accion) {
		this.accion = accion;
	}

	/** Si actualmente se est� arrastrando o no el rat�n */
	boolean arrastrando = false;

	/** x del rat�n antes de producirse el �ltimo arrastre */
	int xAntigua;

	/** y del rat�n antes de producirse el �ltimo arrastre */
	int yAntigua;

	/**
	 * Se mueve el rat�n sin arrastre. Se marca como que no se est� arrastrando
	 */
	public void mouseMoved(MouseEvent e) {
		if (arrastrando == true)
			accion.finalizaArrastra(xAntigua, yAntigua);
		arrastrando = false;
		xAntigua = e.getX();
		yAntigua = e.getY();

	}

	/**
	 * Se est� arrastrando el rat�n. Se avisa a la accion correspondiente y se
	 * actualizan todas las coordenadas.
	 */
	public void mouseDragged(MouseEvent e) {

		if (arrastrando == false) {
			accion.comienzaArrastra(e.getX(), e.getY());
			arrastrando = true;
		}
		accion.arrastra(xAntigua, yAntigua, e.getX(), e.getY());
		xAntigua = e.getX();
		yAntigua = e.getY();

	}

	/**
	 * Permite cambiar la acci�n a realizar cuando se arrastre el rat�n.
	 * 
	 * @param accion
	 *            La nueva acci�n a realizar.
	 * @uml.property name="accion"
	 */
	public void setAccion(InterfaceArrastrarRaton accion) {
		this.accion = accion;
	}

	@Override
	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub

	}

	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub

	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub

	}

	@Override
	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub

	}

	@Override
	public void mouseReleased(MouseEvent e) {
		accion.sueltaRaton(e);

	}

}
